Apache Flink-এ Checkpointing এবং Savepoints হলো স্টেটফুল স্ট্রিম প্রসেসিংয়ের দুটি গুরুত্বপূর্ণ ফিচার যা ডেটা অ্যাপ্লিকেশনগুলোর ফল্ট টলারেন্স এবং স্টেট ম্যানেজমেন্ট নিশ্চিত করে। এগুলোর মাধ্যমে অ্যাপ্লিকেশন ক্র্যাশ বা রিস্টার্ট হওয়ার পরেও পূর্ববর্তী স্টেট থেকে পুনরায় কাজ শুরু করা যায়, যা ডেটা প্রসেসিংয়ের নির্ভুলতা বজায় রাখতে সাহায্য করে।
১. Checkpointing
Checkpointing হলো Flink-এর স্বয়ংক্রিয় মেকানিজম যা নির্দিষ্ট সময় অন্তর প্রতিটি টাস্কের স্টেট সংরক্ষণ করে। এটি নিশ্চিত করে যে, কোনো সমস্যা বা ব্যর্থতার কারণে অ্যাপ্লিকেশন রিস্টার্ট হলেও ডেটা প্রসেসিং শেষ সফল চেকপয়েন্ট থেকে শুরু হয়।
Checkpointing কনফিগারেশন:
Flink-এ চেকপয়েন্টিং কনফিগার করার জন্য CheckpointConfig ব্যবহার করা হয়। এটি সাধারণত StreamExecutionEnvironment-এ কনফিগার করা হয়।
কোড উদাহরণ:
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// চেকপয়েন্টিং চালু করা এবং ইন্টারভাল সেট করা (১০ সেকেন্ড)
env.enableCheckpointing(10000);
// চেকপয়েন্ট কনফিগারেশন সেট করা
env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE);
env.getCheckpointConfig().setMinPauseBetweenCheckpoints(5000);
env.getCheckpointConfig().setCheckpointTimeout(60000);
env.getCheckpointConfig().setMaxConcurrentCheckpoints(1);
বর্ণনা:
enableCheckpointing(10000): ১০ সেকেন্ড অন্তর চেকপয়েন্ট তৈরি করা।CheckpointingMode.EXACTLY_ONCE: চেকপয়েন্ট মেকানিজম প্রতিটি ডেটা রেকর্ড একবারই প্রসেস করা নিশ্চিত করে।setCheckpointTimeout(60000): চেকপয়েন্ট টাইমআউট ৬০ সেকেন্ড সেট করা হয়েছে।
Checkpointing এর সুবিধা:
- Fault Tolerance: কোনো টাস্ক ব্যর্থ হলে শেষ সফল চেকপয়েন্ট থেকে পুনরায় প্রসেস শুরু করা যায়।
- Consistency: Flink চেকপয়েন্ট ব্যবহারের মাধ্যমে নির্ভুল ডেটা প্রসেসিং এবং অ্যাপ্লিকেশনের স্টেট ম্যানেজমেন্ট নিশ্চিত করে।
- Automatic State Management: Flink স্বয়ংক্রিয়ভাবে স্টেট সংরক্ষণ ও পুনরুদ্ধার করতে সক্ষম।
২. Savepoints
Savepoints হলো ম্যানুয়ালভাবে তৈরি করা চেকপয়েন্ট, যা মূলত অ্যাপ্লিকেশন আপগ্রেড, রিস্টার্ট, বা মাইগ্রেশনের জন্য ব্যবহৃত হয়। Savepoints সাধারণত একটি নির্দিষ্ট অবস্থায় অ্যাপ্লিকেশনের স্টেট ধরে রাখে, এবং পরবর্তী সময়ে অ্যাপ্লিকেশন আবার শুরু করার সময় সেখান থেকে শুরু করা যায়।
Savepoints তৈরি করা:
Flink-এ Savepoints তৈরি করতে, কমান্ড-লাইন টুল বা API ব্যবহার করা যায়।
কমান্ড উদাহরণ:
bin/flink savepoint :jobId /path/to/savepoint-directory
বর্ণনা: এখানে, নির্দিষ্ট jobId-এর জন্য একটি Savepoint তৈরি করা হচ্ছে এবং এটি /path/to/savepoint-directory-এ সংরক্ষণ করা হচ্ছে।
Savepoints থেকে পুনরায় কাজ শুরু করা:
Flink Savepoints ব্যবহার করে অ্যাপ্লিকেশন পুনরায় শুরু করা যায়, যা স্টেটফুল অ্যাপ্লিকেশনগুলোর আপগ্রেড বা মাইগ্রেশনের ক্ষেত্রে কার্যকর।
কমান্ড উদাহরণ:
bin/flink run -s /path/to/savepoint-directory savepoint-job.jar
বর্ণনা: Savepoint ফাইলের অবস্থান (/path/to/savepoint-directory) থেকে Flink অ্যাপ্লিকেশন পুনরায় চালানো হচ্ছে।
Savepoints-এর বৈশিষ্ট্য:
- Manual Triggering: ব্যবহারকারী ম্যানুয়ালি Savepoint তৈরি ও পরিচালনা করতে পারেন।
- Long-term State Management: অ্যাপ্লিকেশনের স্টেট সংরক্ষণ ও পুনরায় ব্যবহার করার জন্য Savepoints খুব কার্যকর।
- Application Upgrades: Flink অ্যাপ্লিকেশনের নতুন ভার্সনে স্টেট ট্রান্সফার করার জন্য Savepoints ব্যবহার করা যায়।
Checkpointing এবং Savepoints-এর পার্থক্য:
| ফিচার | Checkpointing | Savepoints |
|---|---|---|
| Triggering | স্বয়ংক্রিয়ভাবে নির্দিষ্ট ইন্টারভালে ঘটে | ম্যানুয়ালি ট্রিগার করতে হয় |
| Usage | অ্যাপ্লিকেশনের ফল্ট টলারেন্স এবং স্টেট রিকভারি | অ্যাপ্লিকেশন আপগ্রেড, রিস্টার্ট, এবং মাইগ্রেশনে ব্যবহৃত |
| Retention | স্বল্পমেয়াদী, শুধুমাত্র ফেইলওভার হ্যান্ডলিং | দীর্ঘমেয়াদী, কাস্টম স্টেট ম্যানেজমেন্টের জন্য |
| Storage | সাধারণত হালকা ওজনের স্টোরেজে সংরক্ষণ হয় | নির্দিষ্ট স্টোরেজ লোকেশনে সংরক্ষণ করা হয় |
উপসংহার
Apache Flink-এ Checkpointing এবং Savepoints ব্যবহার করে অ্যাপ্লিকেশনগুলোর ফল্ট টলারেন্স, স্টেট ম্যানেজমেন্ট, এবং স্কেলাবিলিটি নিশ্চিত করা সম্ভব। Checkpointing সাধারণত স্বয়ংক্রিয়ভাবে ঘটে এবং ফেইলওভার সিচুয়েশন ম্যানেজ করে, যেখানে Savepoints ম্যানুয়ালি ট্রিগার করা হয় এবং অ্যাপ্লিকেশনের আপগ্রেড বা মাইগ্রেশনে ব্যবহৃত হয়। এই দুটি ফিচার Flink-এ স্টেটফুল ডেটা প্রসেসিং আরও নির্ভরযোগ্য এবং স্কেলেবল করে তোলে।
Read more